// // #include <stdbool.h>
// // #include <stdio.h>
// //
// // int main(void) {
// //     // printf("Hello, World!\n");
// //     int n;
// //     // scanf("%d",&n);
// //     int arr[100];
// //     while (scanf("%d",&n)!=EOF) {
// //         for (int i = 0; i < n; ++i) {
// //             scanf("%d",&arr[i]);
// //         }
// //         bool flag=true;
// //         for (int i = 0; i < n-1; ++i) {//控制躺数,n个数据应该是n-1躺排序
// //             for (int j = 0; j < n-i-1; ++j) {//控制每次的比较大小，最后所排序的那个数天然有序
// //                 if (arr[j]>arr[j+1]) {
// //                     int temp=arr[j];
// //                     arr[j]=arr[j+1];
// //                     arr[j+1]=temp;
// //                     flag=false;
// //                 }
// //             }
// //             if (flag) {
// //                 break;
// //             }
// //         }
// //         for (int i = 0; i < n; ++i) {
// //             printf("%d ",arr[i]);
// //         }
// //         printf("\n");
// //     }
// //
// //
// //     return 0;
// // }
// #include<stdio.h>
// #include<stdlib.h>
// #include<stdbool.h>
// int main() {
//     int n=10;
//     int arr[100];
//     scanf("%d",&n);
//     for (int i = 0; i < n; ++i) {
//         scanf("%d",&arr[i]);
//     }
//     for (int i = 0; i < n-1; ++i) {
//         int min=i;
//         for (int j = min+1; j < n; ++j) {
//             //10 9 8 7 6 5 4 3 2 1
//             //...
//             //1 2 3 4 5 6 7 8 9 10
//             if(arr[min]>arr[j]) {
//                 min=j;
//             }
//         }
//         if (min!=i) {
//             int temp=arr[min];
//             arr[min]=arr[i];
//             arr[i]=temp;
//         }
//     }
//     for (int i = 0; i < n; ++i) {
//         printf("%d\n",arr[i]);
//     }
//     return 0;
// }//快速排序
#include <stdio.h>
#include <stdlib.h>
// void quicksort(int a[], int first, int end);
// int partition(int a[], int fitst, int end);
int partition(int a[], int first, int end)    //划分，根据轴值将数组划分为两块，分别大于或小于轴值的区域
{
    int i = first,j=end;
    while (i<j)
    {
        while (i<j && a[i]<=a[j])             //从后向前与轴值比较，若找到小于轴值的则交换
            j--;
        if (i<j)
        {
            int temp = a[i];
            a[i] = a[j];
            a[j] = temp;
            i++;
        }
        while (i<j && a[i]<=a[j])             //从前向后与轴值比较，若找到大于轴值的则交换
            i++;
        if (i<j)
        {
            int temp = a[i];
            a[i] = a[j];
            a[j] = temp;
            j--;
        }
    }
    return i;
}
void quicksort(int a[], int first, int end)
{
    int pos;
    if (first<end)                            //递归出口
    {
        pos=partition(a, first, end);         //递归分别对划分好的区域，继续划分，直到不能划分
        quicksort(a, first, pos - 1);
        quicksort(a, pos + 1, end);
    }
}
int main()
{
    int n;
    scanf("%d", &n);
    int a[n];
    for (int i = 0; i < n;i++)
        scanf("%d", &a[i]);
    quicksort(a, 0, n-1);
    for (int i = 0; i < n;i++)
        printf("%d ", a[i]);
    printf("\n");
    system("pause");
    return 0;
}
